package priv.conceit.sc.hoxton.file.handle.compress;

import com.github.junrar.Archive;
import com.github.junrar.exception.RarException;
import com.github.junrar.rarfile.FileHeader;
import org.springframework.stereotype.Component;
import priv.conceit.sc.hoxton.common.entity.file.dto.FilePathDTO;
import priv.conceit.sc.hoxton.file.util.PdfUtil;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;

/**
 * sc-hoxton
 *
 * @author Conceit
 * 2020/6/12 增加方法
 * @since 1.0.0, 2020/6/12
 */
@Component
public class RarCompressHandle extends AbsCompressHandle{

	/**
	 * unCompress 解压rar文件
	 *
	 * @param filePathDTO 封装的文件信息
	 * @param inputStream 文件输入流
	 * @param convertFile 转换过之后的文件
	 * @return boolean
	 * @author conceit
	 * @date 2020/6/15 17:12
	 */
	@Override
	public boolean unCompress(FilePathDTO filePathDTO, InputStream inputStream, File convertFile) {

		//rar 目前rar只支持rar4.0以及以下的解压
		Archive archive = null;
		try {
			archive = new Archive(inputStream);
			List<String> items = new ArrayList<>();
			Iterator<FileHeader> iterator=archive.iterator();
			while (iterator.hasNext()){
				FileHeader fileHeader=iterator.next();
				items.add(fileHeader.getFileNameW());
			}
			PdfUtil pdfUtil=new PdfUtil();
			pdfUtil.generatePdf(convertFile,filePathDTO.getOriginalName(),items);
		} catch (RarException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}finally {
			if(Objects.nonNull(archive)){
				try {
					archive.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return true;
	}
}
